/**
 * @description: 深度克隆对象和数组。
 * @param {obj} 需要克隆的对象。
 * @return: type存在则返回对应模板图标，否则返回模板图标集合。
 */
export function clone(obj, deep = true) {
  if (Array.isArray(obj)) {
    if (deep) {
      //深度克隆
      var newArr = []
      for (var i = 0; i < obj.length; i++) {
        newArr.push(clone(obj[i], deep))
      }
      return newArr
    } else {
      return obj.slice() //复制数组
    }
  } else if (typeof obj === 'object') {
    var newObj = {}
    for (var prop in obj) {
      if (deep) {
        //深度克隆
        newObj[prop] = clone(obj[prop], deep)
      } else {
        newObj[prop] = obj[prop]
      }
    }
    if (obj === null) {
      return null
    } else {
      return newObj
    }
  } else {
    //函数、原始类型
    return obj //递归的终止条件
  }
}

/**
 * 函数节流
 * @param {function} func 需要节流的函数
 * @param {number} wait 函数执行频率
 * @returns 返回一个函数
 */
export function throttle(func, wait = 3000) {
  let lastTime = 0
  return function (...args) {
    let nowTime = new Date().getTime()
    if (nowTime - lastTime > wait) {
      lastTime = nowTime
      func.apply(this, args)
    }
  }
}

/**
 * @description 获取url参数
 * @param { String } key url参数的key值
 * @returns { String } value
 */
export function getUrlParam(key) {
  var after = window.location.search
  //key存在先通过search取值如果取不到就通过hash来取
  after = after.substr(1) || window.location.hash.split('?')[1]

  if (after) {
    var reg = new RegExp('(^|&)' + key + '=([^&]*)(&|$)')
    var r = after.match(reg)
    if (r != null) {
      return decodeURIComponent(r[2])
    } else {
      return null
    }
  }
}

/**
 * @description 数组去重
 * @param { Array<Object> } data 去重数组对象
 * @param { String } key 去重关键对比属性
 */
export function distinctObj(data, key) {
  let temp = {}
  let result = []
  data.map(item => {
    if (!temp[item[key]]) {
      result.push(item)
      temp[item[key]] = true
    }
  })
  return result
}
